// 清空request基本配置
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store/index.js'
import router from '@/router/index.js'

// create an axios instance
const service = axios.create({
  // 请求基准地址
  baseURL: process.env.VUE_APP_BASE_API
})

// request interceptor
// 请求拦截器 - 通过某种条件判断，可以在请求传到后端之前添加某些参数
service.interceptors.request.use(config => {
  if (store.state.user.token) {
    config.headers.Authorization = 'Bearer ' + store.state.user.token
  }
  return config
})

// response interceptor
// 响应拦截器
// 1. 当接口出现错误异常时，可以在此统一的抛出错误提示弹框
// 2. 当符合某种条件时，可以做到例如重新登录，返回登录页面的操作
service.interceptors.response.use(response => {
  // 状态码为200执行这个回调
  const { data: { success, message, data }} = response
  // 优化代码2,统一错误处理
  if (!success) {
    // 提示错误
    Message.error(message)
    return Promise.reject(new Error(message))
  }
  return data
}, error => {
  // 状态码不为200执行这个回调
  console.dir(error)
  if (error && error.response && error.response.status === 401) {
    // 退出操作,重新登录
    store.dispatch('user/logout')
    router.push('/login')
  }
})

export default service
